<?php
// 基础类
class BaseAction extends Action
{


    /* 初始化
	 *
	 */
	public function _initialize()
	{
		// 注册自定义的错误处理函数
		function show_error($err_level, $msg, $err_file, $err_line)
		{
			$is_show = APP_DEBUG ? '' : 'display:none;';
			echo "
				<div>
					<h1>{$msg}</h1>
					<span style='{$is_show}'><b>错误位置</b></span>
					<br />
					<span style='{$is_show}'>File: {$err_file}</span>
					<span style='margin-left:20px;{$is_show}'>Line: {$err_line}</span>
				</div>";
			die();
		}
		set_error_handler('show_error', E_USER_ERROR);
	}
	

	/* 调用不存在的方法时，自动加载
	 *
	 */
	public function __call($func, $args)
	{
		$class_name = get_called_class();
		$err_msg = $func . '() does not exist.';

		if(APP_DEBUG)
		{
			$err_msg = $class_name . ':' . $err_msg;
			halt($err_msg);
		}
		else
		{
			echo $err_msg;
		}

		die();
	}


    /* 默认首页
	 *
	 */
	public function index()
	{
		echo "Welcome!";
	}


    /* 保存日志（调试用）
	 *
	 */
	public function save_log($custom='')
	{
		$db_conf = $this->get_db_config();

		$data['get'] = json_encode($_GET);
		$data['post'] = json_encode($_POST);
		if($custom != NULL)
		{
			$data['custom'] = $custom;
		}
		$res = M('log', '', $db_conf)->add($data);
	}


    /* 组装数据库配置信息（用于跨库操作）
	 * db_name：数据库名，若为空则默认为主库；为original则默认为本地服务器
	 */
	public function get_db_config($db_name='')
	{
        // 数据库配置字段
        $db_conf_arr = array(
            C('db_type'),
            '://',
            C('db_user'),
            ':',
            C('db_pwd'),
            '@',
            C('db_host'),
            ':',
            C('db_port'),
            '/'
        );
        // 获取原始配置
        $original_db_conf = implode('', $db_conf_arr);
        // 获取最终配置
		$check_city_name = preg_match_all('/^[a-zA-Z]+$/', $db_name);
		if($check_city_name)
		{
			$db_conf = $original_db_conf . C('db_prefix') . $db_name;
		}
		else
		{
			$db_conf = $original_db_conf . C('db_name');
		}

		return $db_conf;
	}


	/* 分页
	 * $count：总条数
	 * $page_size：分页尺寸
	 * $button_amount：按钮个数
	 * $page_button_parm：页数按钮的附加参数（数组，采用'参数名'=>'参数值'的格式）
	 */
	public function page($count, $page_size=20, $button_amount=5, $page_button_parm=array())
	{
		// 存储总条数
		$PAGE['count'] = $count;
		// 计算总页数
		$PAGE['total_page'] = intval( ceil($PAGE['count'] / $page_size) );
		// 获取当前页数
		$PAGE['now_page'] = intval($_GET['now_page']);
		if($PAGE['now_page'] <= 0)
		{
			$PAGE['now_page'] = 1;
		}
		if($PAGE['now_page'] > $PAGE['total_page'])
		{
			$PAGE['now_page'] = $PAGE['total_page'];
		}
		// 计算“上一页”页数
		$PAGE['prev_page'] = $PAGE['now_page'] - 1;
		if($PAGE['prev_page'] <= 0)
		{
			$PAGE['prev_page'] = 'disable';
		}
		// 计算“下一页”页数
		$PAGE['next_page'] = $PAGE['now_page'] + 1;
		if($PAGE['next_page'] > $PAGE['total_page'])
		{
			$PAGE['next_page'] = 'disable';
		}
		// 首页页码
		$PAGE['first_page'] = 1;
		// 末页页码
		$PAGE['end_page'] = $PAGE['total_page'];
		// 计算要显示的页数
		$show_pages[] = $PAGE['now_page'];
		for($i=1; $i<=$PAGE['end_page']; $i++)
		{
			$tmp = $PAGE['now_page'] + $i;
			if( ($tmp >= $PAGE['first_page']) && ($tmp <= $PAGE['end_page']) )
			{
				$show_pages[] = $tmp;
			}
			$tmp = $PAGE['now_page'] - $i;
			if( ($tmp >= $PAGE['first_page']) && ($tmp <= $PAGE['end_page']) )
			{
				$show_pages[] = $tmp;
			}
			if( count($show_pages) >= $button_amount )
			{
				break;
			}
		}
		sort($show_pages);
		if( count($show_pages) > $button_amount)
		{
			unset($show_pages[0]);
			$show_pages = array_values($show_pages);
		}
		$PAGE['page_button'] = $show_pages;
		// 计算查询范围
		$PAGE['limit'] = ($PAGE['now_page'] - 1) * $page_size . ',' . $page_size;
		// 处理附加参数
		if( $page_button_parm && is_array($page_button_parm) )
		{
			// 循环处理数据
			foreach($page_button_parm as $m=>$n)
			{
				// 循环拼装参数字符串
				$PAGE['page_button_prm'] .= $m . '=' . $n . '&';
				// 生成跳页表单的隐藏数据
				$tmp = array(
					'field_name' => $m,
					'field_value' => $n
				);
				$PAGE['page_button_hidden_parm'][] = $tmp;
			}
		}

		return $PAGE;
	}


	/* 生成验证码
	 * 【参数列表】
	 * 验证码位数
	 * 类型：混合
	 * 图片类型：png
	 * 验证码宽度
	 * 验证码高度
	 * 验证码SESSION名
	 * 字号
	 * 字间距
	 * 左边距
	 * 上边距
	 * 无边框
	 */
	public function prove_code()
	{
		// 获取宽度
		$width = intval($_GET['width']) ? $_GET['width'] : '80';
		// 获取高度
		$height = intval($_GET['height']) ? $_GET['height'] : '28';
		// 获取字号
		$font_size = intval($_GET['font_size']) ? $_GET['font_size'] : '14';
		// 获取字间距
		$letter_spacing = intval($_GET['letter_spacing']) ? $_GET['letter_spacing'] : '10';
		// 左边距
		$padding_left = intval($_GET['padding_left']);
		// 上边距
		$padding_top = intval($_GET['padding_top']);

		// 生成验证码
		import('ORG.Util.Image');
		Image::buildImageVerify(5, 5, 'png', $width, $height, 'bag_prove_code', $font_size, $letter_spacing, $padding_left, $padding_top, $border);
	}


}
